package com.xcc.httpUtils.callback;

import com.xcc.httpUtils.Exceptions.HttpUtilsException;
import okhttp3.Call;
import okhttp3.Response;

/**
 * Created by Carman on 2017/7/7.
 * HttpUtils 请求回调对象
 *
 * 修改:
 * 时间: 2017年9月3日17:00:39
 *
 * 请求成功添加检测机制
 * 修改前:
 *      只要服务器与客户端建立连接,则表示请求成功.
 * 修改后:
 *      添加服务器返回数据状态码检测,状态码在 200-300 之间为正常数据.将调用 requestSuccess 方法.
 */
public abstract class BaseHttpCallBack {

    /**
     * 网络请求成功
     *
     * @param call
     * @param response
     */
    final public void netWorkRequestSuccess(Call call, Response response) {
        try {
            if (response.isSuccessful()) {
                requestSuccess(call, response);
            } else {
                // HttpUtilsException.REQUEST_RESULT_ERROR
                requestError(call, new HttpUtilsException(response.body().string())); // 服务器请求失败
            }
        } catch (Exception e) {
            e.printStackTrace();
            exceptionError(e);
        }
    }

    /**
     * 异常错误
     *
     * @param e
     */
    public void exceptionError(Exception e){

    }

    /**
     * 数据请求成功
     *
     * @param call     OkHttp Call 实例对象
     * @param response OkHttp Response 实例对象
     */
    abstract public void requestSuccess(Call call, Response response);

    /**
     * 请求失败
     *
     * @param call OkHttp Call 实例对象
     * @param e    失败方法
     */
    public void requestError(Call call, Exception e) {
    }

    /**
     * 默认的回调
     */
    public static BaseHttpCallBack DEFAULT_CALLBACK = new BaseHttpCallBack() {
        @Override
        public void requestSuccess(Call call, Response response) {
            // 没有设置回调使用默认回调
        }
    };

}
